package cn.hrbnu.web;

import cn.hrbnu.po.User;
import cn.hrbnu.service.UserService;
import cn.hrbnu.util.ResponseResult;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * @author 薛旭辉
 * @version 1.0
 * &#064;ClassName  UserController
 * &#064;date  2025-06-17 16:13
 */

@RestController
@RequestMapping
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    /**
     * 处理用户登录请求
     * <p>
     * 该方法通过接收用户信息来验证登录请求登录逻辑由UserService中的login方法实现
     *
     * @param user 用户对象，包含用户名和密码等信息，用于验证用户身份
     * @return 返回登录结果，包括是否登录成功和相应的消息
     */
    @PostMapping("/login")
    public ResponseResult<Object> login(@RequestBody User user) {
        return userService.login(user);
    }

    /**
     * 获取用户信息
     * <p>
     * 该方法通过GET请求获取当前用户的详细信息它要求客户端发送一个包含token的请求头，
     * 用于验证用户身份并获取用户的相关信息这个方法主要是为了提供一个接口，
     * 让前端或其他系统可以方便地查询用户信息
     *
     * @param request HttpServletRequest对象，用于获取请求头中的token
     * @return ResponseResult对象，包含用户信息的响应结果
     */
    @GetMapping("/user/userInfo")
    public ResponseResult<Object> userInfo(HttpServletRequest request) {
        // 从请求头中获取token，这是验证用户身份的关键信息
        String token = request.getHeader("token");
        // 调用userService的userInfo方法，传入token，由服务层处理用户信息的获取
        return userService.userInfo(token);
    }

    /**
     * 更新用户信息的接口
     * 该方法通过HTTP PUT请求接收用户信息，并将其更新到系统中
     * 主要用于用户信息的修改和更新场景
     *
     * @param user 用户对象，包含需要更新的用户信息
     * @return ResponseResult 包含更新操作结果的响应对象
     */
    @PutMapping("/user/userInfo")
    public ResponseResult<Object> updateUserInfo(@RequestBody User user) {
        // 调用userService的updateUserInfo方法来处理用户信息的更新
        // 参数token用于验证用户身份，确保只有合法用户可以更新信息
        return userService.updateUserInfo(user);
    }

    /**
     * 处理用户注册请求
     * <p>
     * 该方法通过POST请求处理用户的注册信息它接收一个User对象作为请求体，
     * 并调用userService的register方法来执行注册逻辑返回值是一个ResponseResult对象，
     * 其中包含了注册操作的结果信息
     *
     * @param user 用户信息对象，包含用户注册所需的信息
     * @return 返回注册结果，包括是否成功和相应的提示信息
     */
    @PostMapping("/user/register")
    public ResponseResult<Object> register(@RequestBody User user) {
        return userService.register(user);
    }
}
